/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */



package propres;

//~--- JDK imports ------------------------------------------------------------

/**
 *
 * @author neochange
 */
import java.io.Serializable;

public class alimento implements Serializable {
    
    private String   Nombre;
    private int      Grasas;
    private int      Hidratos;
    private int      Proteinas;
    private int      Calorias;
    private int      Precio;
    private Interval Temp;  // la temporada se guarda por estaciones ot,ve,pr,in
    private String   Vit_min;
    private int      comida;  // se guarda en que comida se puede usar el alimento, se hace con un valor binario 10000 = desayuno, etc
    private int      tipopla; // se guarda si el alimento puede ser usado en platos principales, secundarios o acopañamientos 111=todos
    private String   Clasificacion;    // La clasificacion del alimento segun su categoria: verdura, huevos..
    
    public alimento() {}

    public alimento(String nom, int cal, int grasas, int hidratos, int proteinas, String vit_min, Interval temp,
                    int precio, int com, String clas,int tip) {
        Nombre        = nom;
        Calorias      = cal;
        Grasas        = grasas;
        Hidratos      = hidratos;
        Proteinas     = proteinas;
        Vit_min       = vit_min;
        Temp          = temp;
        Precio        = precio;
        comida        = com;
        Clasificacion = clas;
        tipopla = tip;
    
    }

    public String Get_Nombre() {
        return Nombre;
    }

    public int Get_Calorias() {
        return Calorias;
    }

    public int Get_Grasas() {
        return Grasas;
    }

    public int Get_Hidratos() {
        return Hidratos;
    }

    public int Get_Proteinas() {
        return Proteinas;
    }

    public String Get_Vit_min() {
        return Vit_min;
    }

    public Interval Get_Temp() {
        return Temp;
    }

    public int Get_Precio() {
        return Precio;
    }
    
    public int get_comida(){
    return comida;
    }
    
    
    public int[] Get_comida(){
        int n=comida;int i=4;
        int[] vect= new int[5];
         while(i>=0){
             vect[i]=n%10;
             i--;
             n=n/10;
         }
    return vect;
    }
    
    public int Get_tipopla(){
        return tipopla;
    }
    
    public String Get_clasificacion() {
        return Clasificacion;
    }

    public void Set_Nombre(String nom) {
        Nombre = nom;
    }

    public void Set_Calorias(int cal) {
        Calorias = cal;
    }

    public void Set_Grasas(int grasas) {
        Grasas = grasas;
    }

    public void Set_Hidratos(int hidratos) {
        Hidratos = hidratos;
    }

    public void Set_Proteinas(int proteinas) {
        Proteinas = proteinas;
    }

    public void Set_Vit_min(String vit_min) {
        Vit_min = vit_min;
    }

    public void Set_Temp(Interval temp) {
        Temp = temp;
    }

    public void Set_Precio(int precio) {
        Precio = precio;
    }
    
    public void Set_clasificacion(String clas) {
        Clasificacion=clas;
    }
    
    public void Set_comida(int com){
    comida = com;
    }

    public void Set_tipopla(int tip){
    tipopla= tip;
    }
      

    public boolean cumple(int T_Alimentos, String[] Clasification, Interval Disponibilidad, int Preci, int prec) {
        boolean res    = false;
        boolean carac  = false;
        boolean clas   = false;
        boolean disp   = false;
        boolean precib = false;
        int     comcp  = comida;

        if (prec == 0) {    // comprovamos precio
            if (Precio == Preci) {
                precib = true;
            }
        } else if (prec == -1) {
            if (Precio < Preci) {
                precib = true;
            }
        } else {
            if (Precio > Preci) {
                precib = true;
            }
        }

        if (precib) {
            while ((T_Alimentos != 0) &&!carac) {    // comprovamos si puede estar en esa comida
                if (T_Alimentos % 10 == comida % 10) {
                    carac = true;
                } else {
                    T_Alimentos /= 10;
                    comcp       /= 10;
                }
            }

            if (carac) {                             // comprovamos si cumple la clasificacion del alimento
                int cont = 0;

                while ((cont < Clasification.length) &&!clas) {
                    if (Clasificacion.equals(Clasification[cont])) {
                        clas = true;
                    }

                    cont++;
                }

                if (clas) {                          // comprovamos la disponibilidad
                    if (Disponibilidad.Get_data_in().before(this.Get_Temp().Get_data_in())
                            && Disponibilidad.Get_data_fi().after(this.Get_Temp().Get_data_fi())) {
                        res = true;
                    } else if (Disponibilidad.Get_data_in().after(this.Get_Temp().Get_data_in())
                               && Disponibilidad.Get_data_fi().after(this.Get_Temp().Get_data_fi())) {
                        res = true;
                    } else if (Disponibilidad.Get_data_in().before(this.Get_Temp().Get_data_in())
                               && Disponibilidad.Get_data_fi().before(this.Get_Temp().Get_data_fi())) {
                        res = true;
                    } else if (Disponibilidad.Get_data_in().equals(this.Get_Temp().Get_data_in())
                               && Disponibilidad.Get_data_fi().equals(this.Get_Temp().Get_data_fi())) {
                        res = true;
                    } else {
                        res = false;
                    }
                } else {
                    res = false;
                }
            } else {
                res = false;
            }
        } else {
            res = false;
        }

        return res;
    }
}


